[pytest] pytest

您所在的位置:网站首页 python mock数据 [pytest] pytest

[pytest] pytest

2023-10-05 00:07| 来源: 网络整理| 查看: 265

什么是mock

写测试写到一定程度,就会发现,不做mock是不行的, 一个长达5个小时的计算代码,总不能每次测试都跑一次吧?

这个时候我们就需要mock住代码

所谓mock,简单理解就是模拟代码的行为, 并不真正运行代码本身,从而能够减少重复测试,减少测试的时间.

 

pytest-mock

python自带的单元测试库是unittest,有对应的unittest.mock 可以来进行mock.

pytest对应的mock就是pytest-mock module.

我个人更加喜欢使用pytest, pytest里的mocker也相对简单一些, 大部分unittest.mock的接口, mocker都是支持的.

比如mocker.patch() 和mock 的patch接口是一样的, 参考 https://docs.python.org/3/library/unittest.mock.html#patch

Mocker mocker.patch mocker.patch.object mocker.patch.multiple mocker.patch.dict mocker.stopall Assert

  {mock}.assert_not_called()

  {mock}.assert_called()

  {mock}.assert_called_with()

  {mock}.assert_called_once()

  {mock}.assert_called_once_with()

  {mock}.assert_has_calls()

  {mock}.assert_any_call()

使用方法举例 import os def tt(): os.remove('fake_path') class TestTry: def test_tt(self): remove = mocker.patch('os.remove') tt() remove.assert_called_once()

注意你引入的mock的module不一定要是一个第三方包,也可以是你自己的python代码, 比如mypython.py, 使用 'import mypython'

这样就可以测试你自己写的代码.

patch的必须是一个已经存在的东西,可以使用{module}.{function}来调用的这种.

如果想要mock你的py代码引用的module里的function,则需要在你的py代码里使用 'from module import function',在测试代码里就可以使用 mypython.function 来对其进行mock

测试代码 mypython_test.py

import mypython def test_mypython(mocker): remove = mocker.patch('mypython.remove') mypython.main() remove.assert_called_once()

  

你的代码 mypython.py

from os import remove def main(): remove('fake_path')

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3